package  
{
	import flash.display.MovieClip;
	import flash.display.SimpleButton;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.utils.*;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.ui.Keyboard;
	import flash.ui.Mouse;
	/**
	 * ...
	 * @author Rodrigo Forti
	 */
	public class Main extends MovieClip
	{
		public var _tela:MovieClip
		private var heroi:Heroi
		private var completo:Completo;
		private var luz:Object
		private var inimigo:Inimigo
		
		private var txTempo:TextField;
		private var txFormat:TextFormat;
		private var txScore:TextField;
		
		public static var tempo:uint=0;
		private var tempoFinal:Number = new Number();
		
		private var texto:MovieClip
		private var botao:MovieClip
		private var botaoRetry:MovieClip;
		
		public var listaInimigos:Array;
		public var killlist:Array;
		
		private var cronometro:uint;
		
		private var delay:uint = 30;
		
		private static var _instance:Main
		
		public static function getInstance():Main
		{
			return _instance;
		}
		
		public static function getStage():Stage
		{
			return getInstance().stage;
		}
		
		public function Main() 
		{
			_instance = this;
			iniciarJogo();
		}
		
		public function iniciarJogo():void 
		{	
			
			_tela = new MovieClip
			addChild(_tela);
			
			texto = new Instrucoes();
			texto.x = 50;
			texto.y = 50;
			_tela.addChild(texto);
			
			botao = new Jogar();
			botao.x = 300;
			botao.y = 500;
			_tela.addChild(botao);
			
			botao.addEventListener(MouseEvent.CLICK, comecar, false, 0, true);
			
			//cronometro = new Timer(100);
		}
		
		public function comecar(e:MouseEvent):void
		{
			_tela.removeChild(texto);
			_tela.removeChild(botao);
			
			txTempo = new TextField();
			txFormat = new TextFormat();
			_tela.addChild(txTempo);
			
			txFormat.size = 20;
			txFormat.font = "Trajan Pro"
			
			txTempo.selectable = false;
			txTempo.width = 200;
			txTempo.textColor = 0xFFFFFF;
			
			txTempo.defaultTextFormat = txFormat;
			
			listaInimigos = new Array();
			
			heroi = new Heroi();
			heroi.x = stage.stageWidth / 2;
			heroi.y = stage.stageHeight / 2;
			_tela.addChild(heroi);
			
			addEventListener(Event.ENTER_FRAME, update, false, 0, true);
			cronometro = getTimer();
		}
		
		public function update(e:Event):void
		{
			
			delay --;
			if (delay <= 0)
			{
				inimigo = new Inimigo;
				_tela.addChild(inimigo);
				listaInimigos.push(inimigo);
				delay = 60;
				tempo += 1;
				//swapChildren(_tela.heroi,_tela.inimigo);
			}
			
			//txTempo.text = "Tempo: " + tempo.toString();
			txTempo.text = "Tempo: " + ((getTimer()-cronometro)/1000);
			
			for each (inimigo in listaInimigos)
			{
				
				inimigo.update();
				/*
				if (inimigo.checkdeath()) {
					var n:uint = listaInimigos.indexOf(inimigo);
					listaInimigos.splice(n, 1);
				}
				*/
			}
			
			
			//luz = heroi.getChildByNamsde("luz" + i);
			//luz.gotoAndStop(2);
			
			heroi.update();		
			colisao();
			limite();
			//checkdeath();
			testeganhar();
		}
		
		public function colisao():void
		{
			for (var i:uint = 0; i < listaInimigos.length; i++)
			{
				if (heroi.baixando == false && Heroi.subindo == false )
				{
					if (heroi.contorno.hitTestObject(listaInimigos[i].contorno))
					{
						for (var k:uint = 0; k < listaInimigos[i].listaPedacosInimigo.length; k++) 
						{
							if (listaInimigos[i].listaPedacosInimigo[k] == 1 && heroi.listaPedacosHeroi[k] == 0)
							{
								heroi.download(k,i);
								listaInimigos[i].upload(k);
							}
							
							if (listaInimigos[i].listaPedacosInimigo[k] == 0 && heroi.listaPedacosHeroi[k] == 1)
							{
								heroi.upload(k);
								listaInimigos[i].download(k);
							}
						}
					}
				}
			}
		}
		
		/*
		public function checkdeath():void
		{
			for (var r :uint = 0; r < listaInimigos.length; r++)
			{	
				if (listaInimigos[r].direcaoRandomica == 0 && listaInimigos[r].x < - 100)
				{
					killlist.push(r);
				}
				
				else if (listaInimigos[r].direcaoRandomica == 1 && listaInimigos[r].x > stage.stageWidth + 100)
				{
					killlist.push(r);
				}
				
				else if (listaInimigos[r].direcaoRandomica == 2 && listaInimigos[r].y < - 100)
				{
					killlist.push(r);
				}
				
				else if (listaInimigos[r].direcaoRandomica == 3 && listaInimigos[r].y > stage.stageHeight + 100)
				{
					killlist.push(r);
				}
			}
			if (killlist.length > 0) {
				for (var k:uint = 0; r < listaInimigos.length; r++ ) {
					_tela.removeChild(listaInimigos[r]);
					listaInimigos.splice(r, 1);	
				}
			}
		}
		*/
		
		public function limite():void
		{
			if (heroi.x + heroi.contorno.width / 2 > stage.stageWidth)
			{
				heroi.x = stage.stageWidth - heroi.contorno.width/2
			}
			
			if (heroi.x - heroi.contorno.width / 2 < 0)
			{
				heroi.x = heroi.contorno.width/2
			}
			
			if (heroi.y - heroi.contorno.height / 2 < 0)
			{
				heroi.y = heroi.contorno.height/2
			}
			
			if (heroi.y + heroi.contorno.height / 2 > stage.stageHeight)
			{
				heroi.y = stage.stageHeight - heroi.contorno.height/2
			}
		}
		
		public function testeganhar():void
		{
			for (var m:uint = 0; m < heroi.listaPedacosHeroi.length; m++)
			{
				if (heroi.listaPedacosHeroi[m] == 0)
				{
					break;
				}

				else if (m == 15)
				{
					ganhou();
				}
			}
		}
		
		public function ganhou():void
		{
			removeEventListener(Event.ENTER_FRAME, update)	
			if (inimigo != null)
			{
				inimigo.listaPedacosInimigo.length = 0;
				inimigo.filaDownload.length = 0;
			}
			heroi.listaPedacosHeroi.length = 0;
			heroi.filaDownload.length = 0;
			_tela.heroi = null;
			tempoFinal = (Math.floor((getTimer() - cronometro)/10) / 100);
			trace(tempoFinal);
			completo = new Completo();
			addChild(completo);
			completo.x = 300;
			completo.y = 380;
			
			txScore = new TextField();
			txScore.width = 240;
			txScore.height = 300;
			txScore.textColor = 0xFFFFFF;
			txScore.selectable = false;
			txScore.wordWrap = true;
			txScore.x = 160;
			txScore.y = 180;
			txFormat.align = "center";
			txScore.defaultTextFormat = txFormat
			addChild(txScore);

			txScore.text = "Download completo!\n Seu tempo total foi: " + tempoFinal.toString()+"s";
			tempo = 0;
			removeChild(_tela);
			
			botaoRetry = new Retry();
			botaoRetry.x = 300;
			botaoRetry.y = 500;
			addChild(botaoRetry)
			
			addEventListener(MouseEvent.CLICK, restart, false, 0, true);

		}
		
		function restart(e:MouseEvent):void
		{
			txFormat.align = "left";
			removeChild(botaoRetry);
			removeChild(txScore);
			removeChild(completo);
			removeEventListener(MouseEvent.CLICK, restart);
			iniciarJogo();
		}
		
		function getHeroiY():uint
		{
				return heroi.y;
		}
		
		function getHeroiX():uint
		{
				return heroi.x;
		}
		
	}

}